//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2024 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

#if canImport(FoundationEssentials)
import FoundationEssentials
#else
import Foundation
#endif
@_exported import SotoCore

/// Service object for interacting with AWS Inspector service.
///
/// Amazon Inspector Amazon Inspector enables you to analyze the behavior of your AWS resources and to identify potential security issues. For more information, see  Amazon Inspector User Guide.
public struct Inspector: AWSService {
    // MARK: Member variables

    /// Client used for communication with AWS
    public let client: AWSClient
    /// Service configuration
    public let config: AWSServiceConfig

    // MARK: Initialization

    /// Initialize the Inspector client
    /// - parameters:
    ///     - client: AWSClient used to process requests
    ///     - region: Region of server you want to communicate with. This will override the partition parameter.
    ///     - partition: AWS partition where service resides, standard (.aws), china (.awscn), government (.awsusgov).
    ///     - endpoint: Custom endpoint URL to use instead of standard AWS servers
    ///     - middleware: Middleware chain used to edit requests before they are sent and responses before they are decoded 
    ///     - timeout: Timeout value for HTTP requests
    ///     - byteBufferAllocator: Allocator for ByteBuffers
    ///     - options: Service options
    public init(
        client: AWSClient,
        region: SotoCore.Region? = nil,
        partition: AWSPartition = .aws,
        endpoint: String? = nil,
        middleware: AWSMiddlewareProtocol? = nil,
        timeout: TimeAmount? = nil,
        byteBufferAllocator: ByteBufferAllocator = ByteBufferAllocator(),
        options: AWSServiceConfig.Options = []
    ) {
        self.client = client
        self.config = AWSServiceConfig(
            region: region,
            partition: region?.partition ?? partition,
            amzTarget: "InspectorService",
            serviceName: "Inspector",
            serviceIdentifier: "inspector",
            serviceProtocol: .json(version: "1.1"),
            apiVersion: "2016-02-16",
            endpoint: endpoint,
            variantEndpoints: Self.variantEndpoints,
            errorType: InspectorErrorType.self,
            middleware: middleware,
            timeout: timeout,
            byteBufferAllocator: byteBufferAllocator,
            options: options
        )
    }




    /// FIPS and dualstack endpoints
    static var variantEndpoints: [EndpointVariantType: AWSServiceConfig.EndpointVariant] {[
        [.fips]: .init(endpoints: [
            "us-east-1": "inspector-fips.us-east-1.amazonaws.com",
            "us-east-2": "inspector-fips.us-east-2.amazonaws.com",
            "us-gov-east-1": "inspector-fips.us-gov-east-1.amazonaws.com",
            "us-gov-west-1": "inspector-fips.us-gov-west-1.amazonaws.com",
            "us-west-1": "inspector-fips.us-west-1.amazonaws.com",
            "us-west-2": "inspector-fips.us-west-2.amazonaws.com"
        ])
    ]}

    // MARK: API Calls

    /// Assigns attributes (key and value pairs) to the findings that are specified by the ARNs of the findings.
    @Sendable
    @inlinable
    public func addAttributesToFindings(_ input: AddAttributesToFindingsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> AddAttributesToFindingsResponse {
        try await self.client.execute(
            operation: "AddAttributesToFindings", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Assigns attributes (key and value pairs) to the findings that are specified by the ARNs of the findings.
    ///
    /// Parameters:
    ///   - attributes: The array of attributes that you want to assign to specified findings.
    ///   - findingArns: The ARNs that specify the findings that you want to assign attributes to.
    ///   - logger: Logger use during operation
    @inlinable
    public func addAttributesToFindings(
        attributes: [Attribute],
        findingArns: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AddAttributesToFindingsResponse {
        let input = AddAttributesToFindingsRequest(
            attributes: attributes, 
            findingArns: findingArns
        )
        return try await self.addAttributesToFindings(input, logger: logger)
    }

    /// Creates a new assessment target using the ARN of the resource group that is generated by CreateResourceGroup. If resourceGroupArn is not specified, all EC2 instances in the current AWS account and region are included in the assessment target. If the service-linked role isn’t already registered, this action also creates and registers a service-linked role to grant Amazon Inspector access to AWS Services needed to perform security assessments. You can create up to 50 assessment targets per AWS account. You can run up to 500 concurrent agents per AWS account. For more information, see  Amazon Inspector Assessment Targets.
    @Sendable
    @inlinable
    public func createAssessmentTarget(_ input: CreateAssessmentTargetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateAssessmentTargetResponse {
        try await self.client.execute(
            operation: "CreateAssessmentTarget", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a new assessment target using the ARN of the resource group that is generated by CreateResourceGroup. If resourceGroupArn is not specified, all EC2 instances in the current AWS account and region are included in the assessment target. If the service-linked role isn’t already registered, this action also creates and registers a service-linked role to grant Amazon Inspector access to AWS Services needed to perform security assessments. You can create up to 50 assessment targets per AWS account. You can run up to 500 concurrent agents per AWS account. For more information, see  Amazon Inspector Assessment Targets.
    ///
    /// Parameters:
    ///   - assessmentTargetName: The user-defined name that identifies the assessment target that you want to create. The name must be unique within the AWS account.
    ///   - resourceGroupArn: The ARN that specifies the resource group that is used to create the assessment target. If resourceGroupArn is not specified, all EC2 instances in the current AWS account and region are included in the assessment target.
    ///   - logger: Logger use during operation
    @inlinable
    public func createAssessmentTarget(
        assessmentTargetName: String,
        resourceGroupArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateAssessmentTargetResponse {
        let input = CreateAssessmentTargetRequest(
            assessmentTargetName: assessmentTargetName, 
            resourceGroupArn: resourceGroupArn
        )
        return try await self.createAssessmentTarget(input, logger: logger)
    }

    /// Creates an assessment template for the assessment target that is specified by the ARN of the assessment target. If the service-linked role isn’t already registered, this action also creates and registers a service-linked role to grant Amazon Inspector access to AWS Services needed to perform security assessments.
    @Sendable
    @inlinable
    public func createAssessmentTemplate(_ input: CreateAssessmentTemplateRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateAssessmentTemplateResponse {
        try await self.client.execute(
            operation: "CreateAssessmentTemplate", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates an assessment template for the assessment target that is specified by the ARN of the assessment target. If the service-linked role isn’t already registered, this action also creates and registers a service-linked role to grant Amazon Inspector access to AWS Services needed to perform security assessments.
    ///
    /// Parameters:
    ///   - assessmentTargetArn: The ARN that specifies the assessment target for which you want to create the assessment template.
    ///   - assessmentTemplateName: The user-defined name that identifies the assessment template that you want to create. You can create several assessment templates for an assessment target. The names of the assessment templates that correspond to a particular assessment target must be unique.
    ///   - durationInSeconds: The duration of the assessment run in seconds.
    ///   - rulesPackageArns: The ARNs that specify the rules packages that you want to attach to the assessment template.
    ///   - userAttributesForFindings: The user-defined attributes that are assigned to every finding that is generated by the assessment run that uses this assessment template. An attribute is a key and value pair (an Attribute object). Within an assessment template, each key must be unique.
    ///   - logger: Logger use during operation
    @inlinable
    public func createAssessmentTemplate(
        assessmentTargetArn: String,
        assessmentTemplateName: String,
        durationInSeconds: Int,
        rulesPackageArns: [String],
        userAttributesForFindings: [Attribute]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateAssessmentTemplateResponse {
        let input = CreateAssessmentTemplateRequest(
            assessmentTargetArn: assessmentTargetArn, 
            assessmentTemplateName: assessmentTemplateName, 
            durationInSeconds: durationInSeconds, 
            rulesPackageArns: rulesPackageArns, 
            userAttributesForFindings: userAttributesForFindings
        )
        return try await self.createAssessmentTemplate(input, logger: logger)
    }

    /// Starts the generation of an exclusions preview for the specified assessment template. The exclusions preview lists the potential exclusions (ExclusionPreview) that Inspector can detect before it runs the assessment.
    @Sendable
    @inlinable
    public func createExclusionsPreview(_ input: CreateExclusionsPreviewRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateExclusionsPreviewResponse {
        try await self.client.execute(
            operation: "CreateExclusionsPreview", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Starts the generation of an exclusions preview for the specified assessment template. The exclusions preview lists the potential exclusions (ExclusionPreview) that Inspector can detect before it runs the assessment.
    ///
    /// Parameters:
    ///   - assessmentTemplateArn: The ARN that specifies the assessment template for which you want to create an exclusions preview.
    ///   - logger: Logger use during operation
    @inlinable
    public func createExclusionsPreview(
        assessmentTemplateArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateExclusionsPreviewResponse {
        let input = CreateExclusionsPreviewRequest(
            assessmentTemplateArn: assessmentTemplateArn
        )
        return try await self.createExclusionsPreview(input, logger: logger)
    }

    /// Creates a resource group using the specified set of tags (key and value pairs) that are used to select the EC2 instances to be included in an Amazon Inspector assessment target. The created resource group is then used to create an Amazon Inspector assessment target. For more information, see CreateAssessmentTarget.
    @Sendable
    @inlinable
    public func createResourceGroup(_ input: CreateResourceGroupRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateResourceGroupResponse {
        try await self.client.execute(
            operation: "CreateResourceGroup", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a resource group using the specified set of tags (key and value pairs) that are used to select the EC2 instances to be included in an Amazon Inspector assessment target. The created resource group is then used to create an Amazon Inspector assessment target. For more information, see CreateAssessmentTarget.
    ///
    /// Parameters:
    ///   - resourceGroupTags: A collection of keys and an array of possible values, '[{"key":"key1","values":["Value1","Value2"]},{"key":"Key2","values":["Value3"]}]'. For example,'[{"key":"Name","values":["TestEC2Instance"]}]'.
    ///   - logger: Logger use during operation
    @inlinable
    public func createResourceGroup(
        resourceGroupTags: [ResourceGroupTag],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateResourceGroupResponse {
        let input = CreateResourceGroupRequest(
            resourceGroupTags: resourceGroupTags
        )
        return try await self.createResourceGroup(input, logger: logger)
    }

    /// Deletes the assessment run that is specified by the ARN of the assessment run.
    @Sendable
    @inlinable
    public func deleteAssessmentRun(_ input: DeleteAssessmentRunRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteAssessmentRun", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the assessment run that is specified by the ARN of the assessment run.
    ///
    /// Parameters:
    ///   - assessmentRunArn: The ARN that specifies the assessment run that you want to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteAssessmentRun(
        assessmentRunArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteAssessmentRunRequest(
            assessmentRunArn: assessmentRunArn
        )
        return try await self.deleteAssessmentRun(input, logger: logger)
    }

    /// Deletes the assessment target that is specified by the ARN of the assessment target.
    @Sendable
    @inlinable
    public func deleteAssessmentTarget(_ input: DeleteAssessmentTargetRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteAssessmentTarget", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the assessment target that is specified by the ARN of the assessment target.
    ///
    /// Parameters:
    ///   - assessmentTargetArn: The ARN that specifies the assessment target that you want to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteAssessmentTarget(
        assessmentTargetArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteAssessmentTargetRequest(
            assessmentTargetArn: assessmentTargetArn
        )
        return try await self.deleteAssessmentTarget(input, logger: logger)
    }

    /// Deletes the assessment template that is specified by the ARN of the assessment template.
    @Sendable
    @inlinable
    public func deleteAssessmentTemplate(_ input: DeleteAssessmentTemplateRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteAssessmentTemplate", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the assessment template that is specified by the ARN of the assessment template.
    ///
    /// Parameters:
    ///   - assessmentTemplateArn: The ARN that specifies the assessment template that you want to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteAssessmentTemplate(
        assessmentTemplateArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteAssessmentTemplateRequest(
            assessmentTemplateArn: assessmentTemplateArn
        )
        return try await self.deleteAssessmentTemplate(input, logger: logger)
    }

    /// Describes the assessment runs that are specified by the ARNs of the assessment runs.
    @Sendable
    @inlinable
    public func describeAssessmentRuns(_ input: DescribeAssessmentRunsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeAssessmentRunsResponse {
        try await self.client.execute(
            operation: "DescribeAssessmentRuns", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the assessment runs that are specified by the ARNs of the assessment runs.
    ///
    /// Parameters:
    ///   - assessmentRunArns: The ARN that specifies the assessment run that you want to describe.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeAssessmentRuns(
        assessmentRunArns: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeAssessmentRunsResponse {
        let input = DescribeAssessmentRunsRequest(
            assessmentRunArns: assessmentRunArns
        )
        return try await self.describeAssessmentRuns(input, logger: logger)
    }

    /// Describes the assessment targets that are specified by the ARNs of the assessment targets.
    @Sendable
    @inlinable
    public func describeAssessmentTargets(_ input: DescribeAssessmentTargetsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeAssessmentTargetsResponse {
        try await self.client.execute(
            operation: "DescribeAssessmentTargets", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the assessment targets that are specified by the ARNs of the assessment targets.
    ///
    /// Parameters:
    ///   - assessmentTargetArns: The ARNs that specifies the assessment targets that you want to describe.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeAssessmentTargets(
        assessmentTargetArns: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeAssessmentTargetsResponse {
        let input = DescribeAssessmentTargetsRequest(
            assessmentTargetArns: assessmentTargetArns
        )
        return try await self.describeAssessmentTargets(input, logger: logger)
    }

    /// Describes the assessment templates that are specified by the ARNs of the assessment templates.
    @Sendable
    @inlinable
    public func describeAssessmentTemplates(_ input: DescribeAssessmentTemplatesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeAssessmentTemplatesResponse {
        try await self.client.execute(
            operation: "DescribeAssessmentTemplates", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the assessment templates that are specified by the ARNs of the assessment templates.
    ///
    /// Parameters:
    ///   - assessmentTemplateArns: 
    ///   - logger: Logger use during operation
    @inlinable
    public func describeAssessmentTemplates(
        assessmentTemplateArns: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeAssessmentTemplatesResponse {
        let input = DescribeAssessmentTemplatesRequest(
            assessmentTemplateArns: assessmentTemplateArns
        )
        return try await self.describeAssessmentTemplates(input, logger: logger)
    }

    /// Describes the IAM role that enables Amazon Inspector to access your AWS account.
    @Sendable
    @inlinable
    public func describeCrossAccountAccessRole(logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeCrossAccountAccessRoleResponse {
        try await self.client.execute(
            operation: "DescribeCrossAccountAccessRole", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            logger: logger
        )
    }

    /// Describes the exclusions that are specified by the exclusions' ARNs.
    @Sendable
    @inlinable
    public func describeExclusions(_ input: DescribeExclusionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeExclusionsResponse {
        try await self.client.execute(
            operation: "DescribeExclusions", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the exclusions that are specified by the exclusions' ARNs.
    ///
    /// Parameters:
    ///   - exclusionArns: The list of ARNs that specify the exclusions that you want to describe.
    ///   - locale: The locale into which you want to translate the exclusion's title, description, and recommendation.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeExclusions(
        exclusionArns: [String],
        locale: Locale? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeExclusionsResponse {
        let input = DescribeExclusionsRequest(
            exclusionArns: exclusionArns, 
            locale: locale
        )
        return try await self.describeExclusions(input, logger: logger)
    }

    /// Describes the findings that are specified by the ARNs of the findings.
    @Sendable
    @inlinable
    public func describeFindings(_ input: DescribeFindingsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeFindingsResponse {
        try await self.client.execute(
            operation: "DescribeFindings", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the findings that are specified by the ARNs of the findings.
    ///
    /// Parameters:
    ///   - findingArns: The ARN that specifies the finding that you want to describe.
    ///   - locale: The locale into which you want to translate a finding description, recommendation, and the short description that identifies the finding.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeFindings(
        findingArns: [String],
        locale: Locale? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeFindingsResponse {
        let input = DescribeFindingsRequest(
            findingArns: findingArns, 
            locale: locale
        )
        return try await self.describeFindings(input, logger: logger)
    }

    /// Describes the resource groups that are specified by the ARNs of the resource groups.
    @Sendable
    @inlinable
    public func describeResourceGroups(_ input: DescribeResourceGroupsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeResourceGroupsResponse {
        try await self.client.execute(
            operation: "DescribeResourceGroups", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the resource groups that are specified by the ARNs of the resource groups.
    ///
    /// Parameters:
    ///   - resourceGroupArns: The ARN that specifies the resource group that you want to describe.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeResourceGroups(
        resourceGroupArns: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeResourceGroupsResponse {
        let input = DescribeResourceGroupsRequest(
            resourceGroupArns: resourceGroupArns
        )
        return try await self.describeResourceGroups(input, logger: logger)
    }

    /// Describes the rules packages that are specified by the ARNs of the rules packages.
    @Sendable
    @inlinable
    public func describeRulesPackages(_ input: DescribeRulesPackagesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeRulesPackagesResponse {
        try await self.client.execute(
            operation: "DescribeRulesPackages", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the rules packages that are specified by the ARNs of the rules packages.
    ///
    /// Parameters:
    ///   - locale: The locale that you want to translate a rules package description into.
    ///   - rulesPackageArns: The ARN that specifies the rules package that you want to describe.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeRulesPackages(
        locale: Locale? = nil,
        rulesPackageArns: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeRulesPackagesResponse {
        let input = DescribeRulesPackagesRequest(
            locale: locale, 
            rulesPackageArns: rulesPackageArns
        )
        return try await self.describeRulesPackages(input, logger: logger)
    }

    /// Produces an assessment report that includes detailed and comprehensive results of a specified assessment run.
    @Sendable
    @inlinable
    public func getAssessmentReport(_ input: GetAssessmentReportRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetAssessmentReportResponse {
        try await self.client.execute(
            operation: "GetAssessmentReport", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Produces an assessment report that includes detailed and comprehensive results of a specified assessment run.
    ///
    /// Parameters:
    ///   - assessmentRunArn: The ARN that specifies the assessment run for which you want to generate a report.
    ///   - reportFileFormat: Specifies the file format (html or pdf) of the assessment report that you want to generate.
    ///   - reportType: Specifies the type of the assessment report that you want to generate. There are two types of assessment reports: a finding report and a full report. For more information, see Assessment Reports.
    ///   - logger: Logger use during operation
    @inlinable
    public func getAssessmentReport(
        assessmentRunArn: String,
        reportFileFormat: ReportFileFormat,
        reportType: ReportType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetAssessmentReportResponse {
        let input = GetAssessmentReportRequest(
            assessmentRunArn: assessmentRunArn, 
            reportFileFormat: reportFileFormat, 
            reportType: reportType
        )
        return try await self.getAssessmentReport(input, logger: logger)
    }

    /// Retrieves the exclusions preview (a list of ExclusionPreview objects) specified by the preview token. You can obtain the preview token by running the CreateExclusionsPreview API.
    @Sendable
    @inlinable
    public func getExclusionsPreview(_ input: GetExclusionsPreviewRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetExclusionsPreviewResponse {
        try await self.client.execute(
            operation: "GetExclusionsPreview", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves the exclusions preview (a list of ExclusionPreview objects) specified by the preview token. You can obtain the preview token by running the CreateExclusionsPreview API.
    ///
    /// Parameters:
    ///   - assessmentTemplateArn: The ARN that specifies the assessment template for which the exclusions preview was requested.
    ///   - locale: The locale into which you want to translate the exclusion's title, description, and recommendation.
    ///   - maxResults: You can use this parameter to indicate the maximum number of items you want in the response. The default value is 100. The maximum value is 500.
    ///   - nextToken: You can use this parameter when paginating results. Set the value of this parameter to null on your first call to the GetExclusionsPreviewRequest action. Subsequent calls to the action fill nextToken in the request with the value of nextToken from the previous response to continue listing data.
    ///   - previewToken: The unique identifier associated of the exclusions preview.
    ///   - logger: Logger use during operation
    @inlinable
    public func getExclusionsPreview(
        assessmentTemplateArn: String,
        locale: Locale? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        previewToken: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetExclusionsPreviewResponse {
        let input = GetExclusionsPreviewRequest(
            assessmentTemplateArn: assessmentTemplateArn, 
            locale: locale, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            previewToken: previewToken
        )
        return try await self.getExclusionsPreview(input, logger: logger)
    }

    /// Information about the data that is collected for the specified assessment run.
    @Sendable
    @inlinable
    public func getTelemetryMetadata(_ input: GetTelemetryMetadataRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetTelemetryMetadataResponse {
        try await self.client.execute(
            operation: "GetTelemetryMetadata", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Information about the data that is collected for the specified assessment run.
    ///
    /// Parameters:
    ///   - assessmentRunArn: The ARN that specifies the assessment run that has the telemetry data that you want to obtain.
    ///   - logger: Logger use during operation
    @inlinable
    public func getTelemetryMetadata(
        assessmentRunArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetTelemetryMetadataResponse {
        let input = GetTelemetryMetadataRequest(
            assessmentRunArn: assessmentRunArn
        )
        return try await self.getTelemetryMetadata(input, logger: logger)
    }

    /// Lists the agents of the assessment runs that are specified by the ARNs of the assessment runs.
    @Sendable
    @inlinable
    public func listAssessmentRunAgents(_ input: ListAssessmentRunAgentsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAssessmentRunAgentsResponse {
        try await self.client.execute(
            operation: "ListAssessmentRunAgents", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the agents of the assessment runs that are specified by the ARNs of the assessment runs.
    ///
    /// Parameters:
    ///   - assessmentRunArn: The ARN that specifies the assessment run whose agents you want to list.
    ///   - filter: You can use this parameter to specify a subset of data to be included in the action's response. For a record to match a filter, all specified filter attributes must match. When multiple values are specified for a filter attribute, any of the values can match.
    ///   - maxResults: You can use this parameter to indicate the maximum number of items that you want in the response. The default value is 10. The maximum value is 500.
    ///   - nextToken: You can use this parameter when paginating results. Set the value of this parameter to null on your first call to the ListAssessmentRunAgents action. Subsequent calls to the action fill nextToken in the request with the value of NextToken from the previous response to continue listing data.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAssessmentRunAgents(
        assessmentRunArn: String,
        filter: AgentFilter? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAssessmentRunAgentsResponse {
        let input = ListAssessmentRunAgentsRequest(
            assessmentRunArn: assessmentRunArn, 
            filter: filter, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listAssessmentRunAgents(input, logger: logger)
    }

    /// Lists the assessment runs that correspond to the assessment templates that are specified by the ARNs of the assessment templates.
    @Sendable
    @inlinable
    public func listAssessmentRuns(_ input: ListAssessmentRunsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAssessmentRunsResponse {
        try await self.client.execute(
            operation: "ListAssessmentRuns", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the assessment runs that correspond to the assessment templates that are specified by the ARNs of the assessment templates.
    ///
    /// Parameters:
    ///   - assessmentTemplateArns: The ARNs that specify the assessment templates whose assessment runs you want to list.
    ///   - filter: You can use this parameter to specify a subset of data to be included in the action's response. For a record to match a filter, all specified filter attributes must match. When multiple values are specified for a filter attribute, any of the values can match.
    ///   - maxResults: You can use this parameter to indicate the maximum number of items that you want in the response. The default value is 10. The maximum value is 500.
    ///   - nextToken: You can use this parameter when paginating results. Set the value of this parameter to null on your first call to the ListAssessmentRuns action. Subsequent calls to the action fill nextToken in the request with the value of NextToken from the previous response to continue listing data.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAssessmentRuns(
        assessmentTemplateArns: [String]? = nil,
        filter: AssessmentRunFilter? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAssessmentRunsResponse {
        let input = ListAssessmentRunsRequest(
            assessmentTemplateArns: assessmentTemplateArns, 
            filter: filter, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listAssessmentRuns(input, logger: logger)
    }

    /// Lists the ARNs of the assessment targets within this AWS account. For more information about assessment targets, see Amazon Inspector Assessment Targets.
    @Sendable
    @inlinable
    public func listAssessmentTargets(_ input: ListAssessmentTargetsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAssessmentTargetsResponse {
        try await self.client.execute(
            operation: "ListAssessmentTargets", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the ARNs of the assessment targets within this AWS account. For more information about assessment targets, see Amazon Inspector Assessment Targets.
    ///
    /// Parameters:
    ///   - filter: You can use this parameter to specify a subset of data to be included in the action's response. For a record to match a filter, all specified filter attributes must match. When multiple values are specified for a filter attribute, any of the values can match.
    ///   - maxResults: You can use this parameter to indicate the maximum number of items you want in the response. The default value is 10. The maximum value is 500.
    ///   - nextToken: You can use this parameter when paginating results. Set the value of this parameter to null on your first call to the ListAssessmentTargets action. Subsequent calls to the action fill nextToken in the request with the value of NextToken from the previous response to continue listing data.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAssessmentTargets(
        filter: AssessmentTargetFilter? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAssessmentTargetsResponse {
        let input = ListAssessmentTargetsRequest(
            filter: filter, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listAssessmentTargets(input, logger: logger)
    }

    /// Lists the assessment templates that correspond to the assessment targets that are specified by the ARNs of the assessment targets.
    @Sendable
    @inlinable
    public func listAssessmentTemplates(_ input: ListAssessmentTemplatesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAssessmentTemplatesResponse {
        try await self.client.execute(
            operation: "ListAssessmentTemplates", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the assessment templates that correspond to the assessment targets that are specified by the ARNs of the assessment targets.
    ///
    /// Parameters:
    ///   - assessmentTargetArns: A list of ARNs that specifies the assessment targets whose assessment templates you want to list.
    ///   - filter: You can use this parameter to specify a subset of data to be included in the action's response. For a record to match a filter, all specified filter attributes must match. When multiple values are specified for a filter attribute, any of the values can match.
    ///   - maxResults: You can use this parameter to indicate the maximum number of items you want in the response. The default value is 10. The maximum value is 500.
    ///   - nextToken: You can use this parameter when paginating results. Set the value of this parameter to null on your first call to the ListAssessmentTemplates action. Subsequent calls to the action fill nextToken in the request with the value of NextToken from the previous response to continue listing data.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAssessmentTemplates(
        assessmentTargetArns: [String]? = nil,
        filter: AssessmentTemplateFilter? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAssessmentTemplatesResponse {
        let input = ListAssessmentTemplatesRequest(
            assessmentTargetArns: assessmentTargetArns, 
            filter: filter, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listAssessmentTemplates(input, logger: logger)
    }

    /// Lists all the event subscriptions for the assessment template that is specified by the ARN of the assessment template. For more information, see SubscribeToEvent and UnsubscribeFromEvent.
    @Sendable
    @inlinable
    public func listEventSubscriptions(_ input: ListEventSubscriptionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListEventSubscriptionsResponse {
        try await self.client.execute(
            operation: "ListEventSubscriptions", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all the event subscriptions for the assessment template that is specified by the ARN of the assessment template. For more information, see SubscribeToEvent and UnsubscribeFromEvent.
    ///
    /// Parameters:
    ///   - maxResults: You can use this parameter to indicate the maximum number of items you want in the response. The default value is 10. The maximum value is 500.
    ///   - nextToken: You can use this parameter when paginating results. Set the value of this parameter to null on your first call to the ListEventSubscriptions action. Subsequent calls to the action fill nextToken in the request with the value of NextToken from the previous response to continue listing data.
    ///   - resourceArn: The ARN of the assessment template for which you want to list the existing event subscriptions.
    ///   - logger: Logger use during operation
    @inlinable
    public func listEventSubscriptions(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        resourceArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListEventSubscriptionsResponse {
        let input = ListEventSubscriptionsRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            resourceArn: resourceArn
        )
        return try await self.listEventSubscriptions(input, logger: logger)
    }

    /// List exclusions that are generated by the assessment run.
    @Sendable
    @inlinable
    public func listExclusions(_ input: ListExclusionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListExclusionsResponse {
        try await self.client.execute(
            operation: "ListExclusions", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// List exclusions that are generated by the assessment run.
    ///
    /// Parameters:
    ///   - assessmentRunArn: The ARN of the assessment run that generated the exclusions that you want to list.
    ///   - maxResults: You can use this parameter to indicate the maximum number of items you want in the response. The default value is 100. The maximum value is 500.
    ///   - nextToken: You can use this parameter when paginating results. Set the value of this parameter to null on your first call to the ListExclusionsRequest action. Subsequent calls to the action fill nextToken in the request with the value of nextToken from the previous response to continue listing data.
    ///   - logger: Logger use during operation
    @inlinable
    public func listExclusions(
        assessmentRunArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListExclusionsResponse {
        let input = ListExclusionsRequest(
            assessmentRunArn: assessmentRunArn, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listExclusions(input, logger: logger)
    }

    /// Lists findings that are generated by the assessment runs that are specified by the ARNs of the assessment runs.
    @Sendable
    @inlinable
    public func listFindings(_ input: ListFindingsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListFindingsResponse {
        try await self.client.execute(
            operation: "ListFindings", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists findings that are generated by the assessment runs that are specified by the ARNs of the assessment runs.
    ///
    /// Parameters:
    ///   - assessmentRunArns: The ARNs of the assessment runs that generate the findings that you want to list.
    ///   - filter: You can use this parameter to specify a subset of data to be included in the action's response. For a record to match a filter, all specified filter attributes must match. When multiple values are specified for a filter attribute, any of the values can match.
    ///   - maxResults: You can use this parameter to indicate the maximum number of items you want in the response. The default value is 10. The maximum value is 500.
    ///   - nextToken: You can use this parameter when paginating results. Set the value of this parameter to null on your first call to the ListFindings action. Subsequent calls to the action fill nextToken in the request with the value of NextToken from the previous response to continue listing data.
    ///   - logger: Logger use during operation
    @inlinable
    public func listFindings(
        assessmentRunArns: [String]? = nil,
        filter: FindingFilter? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListFindingsResponse {
        let input = ListFindingsRequest(
            assessmentRunArns: assessmentRunArns, 
            filter: filter, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listFindings(input, logger: logger)
    }

    /// Lists all available Amazon Inspector rules packages.
    @Sendable
    @inlinable
    public func listRulesPackages(_ input: ListRulesPackagesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListRulesPackagesResponse {
        try await self.client.execute(
            operation: "ListRulesPackages", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all available Amazon Inspector rules packages.
    ///
    /// Parameters:
    ///   - maxResults: You can use this parameter to indicate the maximum number of items you want in the response. The default value is 10. The maximum value is 500.
    ///   - nextToken: You can use this parameter when paginating results. Set the value of this parameter to null on your first call to the ListRulesPackages action. Subsequent calls to the action fill nextToken in the request with the value of NextToken from the previous response to continue listing data.
    ///   - logger: Logger use during operation
    @inlinable
    public func listRulesPackages(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListRulesPackagesResponse {
        let input = ListRulesPackagesRequest(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listRulesPackages(input, logger: logger)
    }

    /// Lists all tags associated with an assessment template.
    @Sendable
    @inlinable
    public func listTagsForResource(_ input: ListTagsForResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListTagsForResourceResponse {
        try await self.client.execute(
            operation: "ListTagsForResource", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all tags associated with an assessment template.
    ///
    /// Parameters:
    ///   - resourceArn: The ARN that specifies the assessment template whose tags you want to list.
    ///   - logger: Logger use during operation
    @inlinable
    public func listTagsForResource(
        resourceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListTagsForResourceResponse {
        let input = ListTagsForResourceRequest(
            resourceArn: resourceArn
        )
        return try await self.listTagsForResource(input, logger: logger)
    }

    /// Previews the agents installed on the EC2 instances that are part of the specified assessment target.
    @Sendable
    @inlinable
    public func previewAgents(_ input: PreviewAgentsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PreviewAgentsResponse {
        try await self.client.execute(
            operation: "PreviewAgents", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Previews the agents installed on the EC2 instances that are part of the specified assessment target.
    ///
    /// Parameters:
    ///   - maxResults: You can use this parameter to indicate the maximum number of items you want in the response. The default value is 10. The maximum value is 500.
    ///   - nextToken: You can use this parameter when paginating results. Set the value of this parameter to null on your first call to the PreviewAgents action. Subsequent calls to the action fill nextToken in the request with the value of NextToken from the previous response to continue listing data.
    ///   - previewAgentsArn: The ARN of the assessment target whose agents you want to preview.
    ///   - logger: Logger use during operation
    @inlinable
    public func previewAgents(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        previewAgentsArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PreviewAgentsResponse {
        let input = PreviewAgentsRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            previewAgentsArn: previewAgentsArn
        )
        return try await self.previewAgents(input, logger: logger)
    }

    /// Registers the IAM role that grants Amazon Inspector access to AWS Services needed to perform security assessments.
    @Sendable
    @inlinable
    public func registerCrossAccountAccessRole(_ input: RegisterCrossAccountAccessRoleRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "RegisterCrossAccountAccessRole", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Registers the IAM role that grants Amazon Inspector access to AWS Services needed to perform security assessments.
    ///
    /// Parameters:
    ///   - roleArn: The ARN of the IAM role that grants Amazon Inspector access to AWS Services needed to perform security assessments.
    ///   - logger: Logger use during operation
    @inlinable
    public func registerCrossAccountAccessRole(
        roleArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = RegisterCrossAccountAccessRoleRequest(
            roleArn: roleArn
        )
        return try await self.registerCrossAccountAccessRole(input, logger: logger)
    }

    /// Removes entire attributes (key and value pairs) from the findings that are specified by the ARNs of the findings where an attribute with the specified key exists.
    @Sendable
    @inlinable
    public func removeAttributesFromFindings(_ input: RemoveAttributesFromFindingsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> RemoveAttributesFromFindingsResponse {
        try await self.client.execute(
            operation: "RemoveAttributesFromFindings", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Removes entire attributes (key and value pairs) from the findings that are specified by the ARNs of the findings where an attribute with the specified key exists.
    ///
    /// Parameters:
    ///   - attributeKeys: The array of attribute keys that you want to remove from specified findings.
    ///   - findingArns: The ARNs that specify the findings that you want to remove attributes from.
    ///   - logger: Logger use during operation
    @inlinable
    public func removeAttributesFromFindings(
        attributeKeys: [String],
        findingArns: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> RemoveAttributesFromFindingsResponse {
        let input = RemoveAttributesFromFindingsRequest(
            attributeKeys: attributeKeys, 
            findingArns: findingArns
        )
        return try await self.removeAttributesFromFindings(input, logger: logger)
    }

    /// Sets tags (key and value pairs) to the assessment template that is specified by the ARN of the assessment template.
    @Sendable
    @inlinable
    public func setTagsForResource(_ input: SetTagsForResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "SetTagsForResource", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Sets tags (key and value pairs) to the assessment template that is specified by the ARN of the assessment template.
    ///
    /// Parameters:
    ///   - resourceArn: The ARN of the assessment template that you want to set tags to.
    ///   - tags: A collection of key and value pairs that you want to set to the assessment template.
    ///   - logger: Logger use during operation
    @inlinable
    public func setTagsForResource(
        resourceArn: String,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = SetTagsForResourceRequest(
            resourceArn: resourceArn, 
            tags: tags
        )
        return try await self.setTagsForResource(input, logger: logger)
    }

    /// Starts the assessment run specified by the ARN of the assessment template. For this API to function properly, you must not exceed the limit of running up to 500 concurrent agents per AWS account.
    @Sendable
    @inlinable
    public func startAssessmentRun(_ input: StartAssessmentRunRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartAssessmentRunResponse {
        try await self.client.execute(
            operation: "StartAssessmentRun", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Starts the assessment run specified by the ARN of the assessment template. For this API to function properly, you must not exceed the limit of running up to 500 concurrent agents per AWS account.
    ///
    /// Parameters:
    ///   - assessmentRunName: You can specify the name for the assessment run. The name must be unique for the assessment template whose ARN is used to start the assessment run.
    ///   - assessmentTemplateArn: The ARN of the assessment template of the assessment run that you want to start.
    ///   - logger: Logger use during operation
    @inlinable
    public func startAssessmentRun(
        assessmentRunName: String? = nil,
        assessmentTemplateArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartAssessmentRunResponse {
        let input = StartAssessmentRunRequest(
            assessmentRunName: assessmentRunName, 
            assessmentTemplateArn: assessmentTemplateArn
        )
        return try await self.startAssessmentRun(input, logger: logger)
    }

    /// Stops the assessment run that is specified by the ARN of the assessment run.
    @Sendable
    @inlinable
    public func stopAssessmentRun(_ input: StopAssessmentRunRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "StopAssessmentRun", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Stops the assessment run that is specified by the ARN of the assessment run.
    ///
    /// Parameters:
    ///   - assessmentRunArn: The ARN of the assessment run that you want to stop.
    ///   - stopAction: An input option that can be set to either START_EVALUATION or SKIP_EVALUATION. START_EVALUATION (the default value), stops the AWS agent from collecting data and begins the results evaluation and the findings generation process. SKIP_EVALUATION cancels the assessment run immediately, after which no findings are generated.
    ///   - logger: Logger use during operation
    @inlinable
    public func stopAssessmentRun(
        assessmentRunArn: String,
        stopAction: StopAction? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = StopAssessmentRunRequest(
            assessmentRunArn: assessmentRunArn, 
            stopAction: stopAction
        )
        return try await self.stopAssessmentRun(input, logger: logger)
    }

    /// Enables the process of sending Amazon Simple Notification Service (SNS) notifications about a specified event to a specified SNS topic.
    @Sendable
    @inlinable
    public func subscribeToEvent(_ input: SubscribeToEventRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "SubscribeToEvent", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Enables the process of sending Amazon Simple Notification Service (SNS) notifications about a specified event to a specified SNS topic.
    ///
    /// Parameters:
    ///   - event: The event for which you want to receive SNS notifications.
    ///   - resourceArn: The ARN of the assessment template that is used during the event for which you want to receive SNS notifications.
    ///   - topicArn: The ARN of the SNS topic to which the SNS notifications are sent.
    ///   - logger: Logger use during operation
    @inlinable
    public func subscribeToEvent(
        event: InspectorEvent,
        resourceArn: String,
        topicArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = SubscribeToEventRequest(
            event: event, 
            resourceArn: resourceArn, 
            topicArn: topicArn
        )
        return try await self.subscribeToEvent(input, logger: logger)
    }

    /// Disables the process of sending Amazon Simple Notification Service (SNS) notifications about a specified event to a specified SNS topic.
    @Sendable
    @inlinable
    public func unsubscribeFromEvent(_ input: UnsubscribeFromEventRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "UnsubscribeFromEvent", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Disables the process of sending Amazon Simple Notification Service (SNS) notifications about a specified event to a specified SNS topic.
    ///
    /// Parameters:
    ///   - event: The event for which you want to stop receiving SNS notifications.
    ///   - resourceArn: The ARN of the assessment template that is used during the event for which you want to stop receiving SNS notifications.
    ///   - topicArn: The ARN of the SNS topic to which SNS notifications are sent.
    ///   - logger: Logger use during operation
    @inlinable
    public func unsubscribeFromEvent(
        event: InspectorEvent,
        resourceArn: String,
        topicArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = UnsubscribeFromEventRequest(
            event: event, 
            resourceArn: resourceArn, 
            topicArn: topicArn
        )
        return try await self.unsubscribeFromEvent(input, logger: logger)
    }

    /// Updates the assessment target that is specified by the ARN of the assessment target. If resourceGroupArn is not specified, all EC2 instances in the current AWS account and region are included in the assessment target.
    @Sendable
    @inlinable
    public func updateAssessmentTarget(_ input: UpdateAssessmentTargetRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "UpdateAssessmentTarget", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the assessment target that is specified by the ARN of the assessment target. If resourceGroupArn is not specified, all EC2 instances in the current AWS account and region are included in the assessment target.
    ///
    /// Parameters:
    ///   - assessmentTargetArn: The ARN of the assessment target that you want to update.
    ///   - assessmentTargetName: The name of the assessment target that you want to update.
    ///   - resourceGroupArn: The ARN of the resource group that is used to specify the new resource group to associate with the assessment target.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateAssessmentTarget(
        assessmentTargetArn: String,
        assessmentTargetName: String,
        resourceGroupArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = UpdateAssessmentTargetRequest(
            assessmentTargetArn: assessmentTargetArn, 
            assessmentTargetName: assessmentTargetName, 
            resourceGroupArn: resourceGroupArn
        )
        return try await self.updateAssessmentTarget(input, logger: logger)
    }
}

extension Inspector {
    /// Initializer required by `AWSService.with(middlewares:timeout:byteBufferAllocator:options)`. You are not able to use this initializer directly as there are not public
    /// initializers for `AWSServiceConfig.Patch`. Please use `AWSService.with(middlewares:timeout:byteBufferAllocator:options)` instead.
    public init(from: Inspector, patch: AWSServiceConfig.Patch) {
        self.client = from.client
        self.config = from.config.with(patch: patch)
    }
}

// MARK: Paginators

@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
extension Inspector {
    /// Return PaginatorSequence for operation ``getExclusionsPreview(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getExclusionsPreviewPaginator(
        _ input: GetExclusionsPreviewRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetExclusionsPreviewRequest, GetExclusionsPreviewResponse> {
        return .init(
            input: input,
            command: self.getExclusionsPreview,
            inputKey: \GetExclusionsPreviewRequest.nextToken,
            outputKey: \GetExclusionsPreviewResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getExclusionsPreview(_:logger:)``.
    ///
    /// - Parameters:
    ///   - assessmentTemplateArn: The ARN that specifies the assessment template for which the exclusions preview was requested.
    ///   - locale: The locale into which you want to translate the exclusion's title, description, and recommendation.
    ///   - maxResults: You can use this parameter to indicate the maximum number of items you want in the response. The default value is 100. The maximum value is 500.
    ///   - previewToken: The unique identifier associated of the exclusions preview.
    ///   - logger: Logger used for logging
    @inlinable
    public func getExclusionsPreviewPaginator(
        assessmentTemplateArn: String,
        locale: Locale? = nil,
        maxResults: Int? = nil,
        previewToken: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetExclusionsPreviewRequest, GetExclusionsPreviewResponse> {
        let input = GetExclusionsPreviewRequest(
            assessmentTemplateArn: assessmentTemplateArn, 
            locale: locale, 
            maxResults: maxResults, 
            previewToken: previewToken
        )
        return self.getExclusionsPreviewPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listAssessmentRunAgents(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAssessmentRunAgentsPaginator(
        _ input: ListAssessmentRunAgentsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAssessmentRunAgentsRequest, ListAssessmentRunAgentsResponse> {
        return .init(
            input: input,
            command: self.listAssessmentRunAgents,
            inputKey: \ListAssessmentRunAgentsRequest.nextToken,
            outputKey: \ListAssessmentRunAgentsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAssessmentRunAgents(_:logger:)``.
    ///
    /// - Parameters:
    ///   - assessmentRunArn: The ARN that specifies the assessment run whose agents you want to list.
    ///   - filter: You can use this parameter to specify a subset of data to be included in the action's response. For a record to match a filter, all specified filter attributes must match. When multiple values are specified for a filter attribute, any of the values can match.
    ///   - maxResults: You can use this parameter to indicate the maximum number of items that you want in the response. The default value is 10. The maximum value is 500.
    ///   - logger: Logger used for logging
    @inlinable
    public func listAssessmentRunAgentsPaginator(
        assessmentRunArn: String,
        filter: AgentFilter? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAssessmentRunAgentsRequest, ListAssessmentRunAgentsResponse> {
        let input = ListAssessmentRunAgentsRequest(
            assessmentRunArn: assessmentRunArn, 
            filter: filter, 
            maxResults: maxResults
        )
        return self.listAssessmentRunAgentsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listAssessmentRuns(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAssessmentRunsPaginator(
        _ input: ListAssessmentRunsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAssessmentRunsRequest, ListAssessmentRunsResponse> {
        return .init(
            input: input,
            command: self.listAssessmentRuns,
            inputKey: \ListAssessmentRunsRequest.nextToken,
            outputKey: \ListAssessmentRunsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAssessmentRuns(_:logger:)``.
    ///
    /// - Parameters:
    ///   - assessmentTemplateArns: The ARNs that specify the assessment templates whose assessment runs you want to list.
    ///   - filter: You can use this parameter to specify a subset of data to be included in the action's response. For a record to match a filter, all specified filter attributes must match. When multiple values are specified for a filter attribute, any of the values can match.
    ///   - maxResults: You can use this parameter to indicate the maximum number of items that you want in the response. The default value is 10. The maximum value is 500.
    ///   - logger: Logger used for logging
    @inlinable
    public func listAssessmentRunsPaginator(
        assessmentTemplateArns: [String]? = nil,
        filter: AssessmentRunFilter? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAssessmentRunsRequest, ListAssessmentRunsResponse> {
        let input = ListAssessmentRunsRequest(
            assessmentTemplateArns: assessmentTemplateArns, 
            filter: filter, 
            maxResults: maxResults
        )
        return self.listAssessmentRunsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listAssessmentTargets(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAssessmentTargetsPaginator(
        _ input: ListAssessmentTargetsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAssessmentTargetsRequest, ListAssessmentTargetsResponse> {
        return .init(
            input: input,
            command: self.listAssessmentTargets,
            inputKey: \ListAssessmentTargetsRequest.nextToken,
            outputKey: \ListAssessmentTargetsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAssessmentTargets(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filter: You can use this parameter to specify a subset of data to be included in the action's response. For a record to match a filter, all specified filter attributes must match. When multiple values are specified for a filter attribute, any of the values can match.
    ///   - maxResults: You can use this parameter to indicate the maximum number of items you want in the response. The default value is 10. The maximum value is 500.
    ///   - logger: Logger used for logging
    @inlinable
    public func listAssessmentTargetsPaginator(
        filter: AssessmentTargetFilter? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAssessmentTargetsRequest, ListAssessmentTargetsResponse> {
        let input = ListAssessmentTargetsRequest(
            filter: filter, 
            maxResults: maxResults
        )
        return self.listAssessmentTargetsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listAssessmentTemplates(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAssessmentTemplatesPaginator(
        _ input: ListAssessmentTemplatesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAssessmentTemplatesRequest, ListAssessmentTemplatesResponse> {
        return .init(
            input: input,
            command: self.listAssessmentTemplates,
            inputKey: \ListAssessmentTemplatesRequest.nextToken,
            outputKey: \ListAssessmentTemplatesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAssessmentTemplates(_:logger:)``.
    ///
    /// - Parameters:
    ///   - assessmentTargetArns: A list of ARNs that specifies the assessment targets whose assessment templates you want to list.
    ///   - filter: You can use this parameter to specify a subset of data to be included in the action's response. For a record to match a filter, all specified filter attributes must match. When multiple values are specified for a filter attribute, any of the values can match.
    ///   - maxResults: You can use this parameter to indicate the maximum number of items you want in the response. The default value is 10. The maximum value is 500.
    ///   - logger: Logger used for logging
    @inlinable
    public func listAssessmentTemplatesPaginator(
        assessmentTargetArns: [String]? = nil,
        filter: AssessmentTemplateFilter? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAssessmentTemplatesRequest, ListAssessmentTemplatesResponse> {
        let input = ListAssessmentTemplatesRequest(
            assessmentTargetArns: assessmentTargetArns, 
            filter: filter, 
            maxResults: maxResults
        )
        return self.listAssessmentTemplatesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listEventSubscriptions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listEventSubscriptionsPaginator(
        _ input: ListEventSubscriptionsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListEventSubscriptionsRequest, ListEventSubscriptionsResponse> {
        return .init(
            input: input,
            command: self.listEventSubscriptions,
            inputKey: \ListEventSubscriptionsRequest.nextToken,
            outputKey: \ListEventSubscriptionsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listEventSubscriptions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: You can use this parameter to indicate the maximum number of items you want in the response. The default value is 10. The maximum value is 500.
    ///   - resourceArn: The ARN of the assessment template for which you want to list the existing event subscriptions.
    ///   - logger: Logger used for logging
    @inlinable
    public func listEventSubscriptionsPaginator(
        maxResults: Int? = nil,
        resourceArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListEventSubscriptionsRequest, ListEventSubscriptionsResponse> {
        let input = ListEventSubscriptionsRequest(
            maxResults: maxResults, 
            resourceArn: resourceArn
        )
        return self.listEventSubscriptionsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listExclusions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listExclusionsPaginator(
        _ input: ListExclusionsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListExclusionsRequest, ListExclusionsResponse> {
        return .init(
            input: input,
            command: self.listExclusions,
            inputKey: \ListExclusionsRequest.nextToken,
            outputKey: \ListExclusionsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listExclusions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - assessmentRunArn: The ARN of the assessment run that generated the exclusions that you want to list.
    ///   - maxResults: You can use this parameter to indicate the maximum number of items you want in the response. The default value is 100. The maximum value is 500.
    ///   - logger: Logger used for logging
    @inlinable
    public func listExclusionsPaginator(
        assessmentRunArn: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListExclusionsRequest, ListExclusionsResponse> {
        let input = ListExclusionsRequest(
            assessmentRunArn: assessmentRunArn, 
            maxResults: maxResults
        )
        return self.listExclusionsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listFindings(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listFindingsPaginator(
        _ input: ListFindingsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListFindingsRequest, ListFindingsResponse> {
        return .init(
            input: input,
            command: self.listFindings,
            inputKey: \ListFindingsRequest.nextToken,
            outputKey: \ListFindingsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listFindings(_:logger:)``.
    ///
    /// - Parameters:
    ///   - assessmentRunArns: The ARNs of the assessment runs that generate the findings that you want to list.
    ///   - filter: You can use this parameter to specify a subset of data to be included in the action's response. For a record to match a filter, all specified filter attributes must match. When multiple values are specified for a filter attribute, any of the values can match.
    ///   - maxResults: You can use this parameter to indicate the maximum number of items you want in the response. The default value is 10. The maximum value is 500.
    ///   - logger: Logger used for logging
    @inlinable
    public func listFindingsPaginator(
        assessmentRunArns: [String]? = nil,
        filter: FindingFilter? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListFindingsRequest, ListFindingsResponse> {
        let input = ListFindingsRequest(
            assessmentRunArns: assessmentRunArns, 
            filter: filter, 
            maxResults: maxResults
        )
        return self.listFindingsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listRulesPackages(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listRulesPackagesPaginator(
        _ input: ListRulesPackagesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListRulesPackagesRequest, ListRulesPackagesResponse> {
        return .init(
            input: input,
            command: self.listRulesPackages,
            inputKey: \ListRulesPackagesRequest.nextToken,
            outputKey: \ListRulesPackagesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listRulesPackages(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: You can use this parameter to indicate the maximum number of items you want in the response. The default value is 10. The maximum value is 500.
    ///   - logger: Logger used for logging
    @inlinable
    public func listRulesPackagesPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListRulesPackagesRequest, ListRulesPackagesResponse> {
        let input = ListRulesPackagesRequest(
            maxResults: maxResults
        )
        return self.listRulesPackagesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``previewAgents(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func previewAgentsPaginator(
        _ input: PreviewAgentsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<PreviewAgentsRequest, PreviewAgentsResponse> {
        return .init(
            input: input,
            command: self.previewAgents,
            inputKey: \PreviewAgentsRequest.nextToken,
            outputKey: \PreviewAgentsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``previewAgents(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: You can use this parameter to indicate the maximum number of items you want in the response. The default value is 10. The maximum value is 500.
    ///   - previewAgentsArn: The ARN of the assessment target whose agents you want to preview.
    ///   - logger: Logger used for logging
    @inlinable
    public func previewAgentsPaginator(
        maxResults: Int? = nil,
        previewAgentsArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<PreviewAgentsRequest, PreviewAgentsResponse> {
        let input = PreviewAgentsRequest(
            maxResults: maxResults, 
            previewAgentsArn: previewAgentsArn
        )
        return self.previewAgentsPaginator(input, logger: logger)
    }
}

extension Inspector.GetExclusionsPreviewRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Inspector.GetExclusionsPreviewRequest {
        return .init(
            assessmentTemplateArn: self.assessmentTemplateArn,
            locale: self.locale,
            maxResults: self.maxResults,
            nextToken: token,
            previewToken: self.previewToken
        )
    }
}

extension Inspector.ListAssessmentRunAgentsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Inspector.ListAssessmentRunAgentsRequest {
        return .init(
            assessmentRunArn: self.assessmentRunArn,
            filter: self.filter,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Inspector.ListAssessmentRunsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Inspector.ListAssessmentRunsRequest {
        return .init(
            assessmentTemplateArns: self.assessmentTemplateArns,
            filter: self.filter,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Inspector.ListAssessmentTargetsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Inspector.ListAssessmentTargetsRequest {
        return .init(
            filter: self.filter,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Inspector.ListAssessmentTemplatesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Inspector.ListAssessmentTemplatesRequest {
        return .init(
            assessmentTargetArns: self.assessmentTargetArns,
            filter: self.filter,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Inspector.ListEventSubscriptionsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Inspector.ListEventSubscriptionsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            resourceArn: self.resourceArn
        )
    }
}

extension Inspector.ListExclusionsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Inspector.ListExclusionsRequest {
        return .init(
            assessmentRunArn: self.assessmentRunArn,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Inspector.ListFindingsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Inspector.ListFindingsRequest {
        return .init(
            assessmentRunArns: self.assessmentRunArns,
            filter: self.filter,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Inspector.ListRulesPackagesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Inspector.ListRulesPackagesRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Inspector.PreviewAgentsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Inspector.PreviewAgentsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            previewAgentsArn: self.previewAgentsArn
        )
    }
}
